// 接口域名配置
const BASE_URL = 'https://yuanchu.shangchuapp.com/';

/**
 * 基础请求方法
 * @param {string} url - 请求路径
 * @param {Object} data - 请求参数
 * @param {string} method - 请求方法
 * @param {Object} header - 请求头
 * @returns {Promise}
 */
function request(url, data, method = 'GET', header = {}) {
	// 从缓存中获取token
	const token = uni.getStorageSync('token') || '';
	const is_xcx = 1;
	// 将token添加到请求参数中
	const requestData = {
		...data,
		token,
		is_xcx
	};
	return new Promise((resolve, reject) => {
		uni.request({
			url: BASE_URL + url,
			method,
			data: requestData,
			header: {
				'content-type': 'application/json',
				...header
			},
			success: (res) => {
				if (res.data.code == 1 || res.data.code == 1000) {
					resolve(res.data);
				} else if (res.data.code == 2000) {
					uni.showToast({
						title: res.data.msg || '请重新登录',
						icon: 'none'
					});
					setTimeout(function() {
						uni.redirectTo({
							url: '/pages/register/login'
						})
					}, 1500)

				} else {
					uni.showToast({
						title: res.data.msg || '请求失败',
						icon: 'none'
					});
					reject(res.data);
				}
			},
			fail: (err) => {
				uni.showToast({
					title: '网络请求失败',
					icon: 'none'
				});
				reject(err);
			}
		});
	});
}

/**
 * 微信静默登录
 * @param {Object} data - 登录参数
 * @param {string} data.code - 微信code
 * @returns {Promise}
 */
export function wxLogin(data) {
	return request('app/Wxchat/authorization', data, 'POST');
}

/**
 * 获取短信验证码
 * @param {Object} data - 短信参数
 * @param {string} data.phone - 手机号码
 * @returns {Promise}
 */
export function getSmsCode(data) {
	return request('app/Verify/getCode', data, 'POST');
}

/**
 * 用户注册
 * @param {Object} data - 注册参数
 * @param {string} data.openid - openid
 * @param {string} data.unionid - unionid
 * @param {string} data.phone - 手机号码
 * @param {string} data.captcha_code - 验证码
 * @param {string} data.password - 密码
 * @param {string} data.re_password - 确认密码
 * @returns {Promise}
 */
export function register(data) {
	return request('app/Wxchat/bindPhone', data, 'POST');
}

/**
 * 首页轮播接口
 * @returns {Promise}
 */
export function getBanner() {
	return request('app/index/banner', {}, 'POST');
}

/**
 * 首页商品分类接口
 * @returns {Promise}
 */
export function getParentCate() {
	return request('app/index/getParentCate', {}, 'POST');
}

/**
 * 倒计时时间戳接口
 * @returns {Promise}
 */
export function getCountDown() {
	return request('app/index/countDown', {}, 'POST');
}

/**
 * 系统设置信息接口
 * @returns {Promise}
 */
export function getCustomerImage() {
	return request('app/goods/getCustomerImage', {}, 'POST');
}

/**
 * 首页推荐商品接口
 * @returns {Promise}
 */
export function getRecommendGoods() {
	return request('app/index/getRecommendGoods', {}, 'POST');
}

/**
 * 首页底部商品列表接口（首页搜索也用同一个接口）
 * @param {Object} data - 请求参数
 * @param {number} data.page - 页码
 * @param {string} data.search_word - 搜索关键词
 * @returns {Promise}
 */
export function getGoodsList(data) {
	return request('app/goods/getGoodsList', data, 'POST');
}

/**
 * 购物车列表接口
 * @param {Object} data - 请求参数
 * @param {number} data.page - 页码
 * @returns {Promise}
 */
export function userCart(data) {
	return request('app/cart/userCart', data, 'POST');
}

/**
 * 添加商品到购物车
 * @param {Object} data - 请求参数
 * @param {number} data.goods_id - 商品ID
 * @param {number} data.num - 商品数量
 * @param {number} data.item - 规格属性值ID
 * @returns {Promise}
 */
export function addCart(data) {
	return request('app/cart/addCart', data, 'POST');
}

/**
 * 修改购物车商品数量
 * @param {Object} data - 请求参数
 * @param {number} data.cart_id - 购物车ID
 * @param {number} data.type - 操作类型：1表示加，2表示减
 * @returns {Promise}
 */
export function changeNum(data) {
	return request('app/cart/changeNum', data, 'POST');
}

/**
 * 删除购物车商品
 * @param {Object} data - 请求参数
 * @param {string} data.ids - 购物车ID，多个用逗号分隔
 * @returns {Promise}
 */
export function delCart(data) {
	return request('app/cart/delCart', data, 'POST');
}

/**
 * 购物车结算接口
 * @param {Object} data - 请求参数
 * @param {string} data.cart_ids - 购物车ID，多个用逗号分隔
 * @returns {Promise}
 */
export function cartBuyGoods(data) {
	return request('app/order/cartBuyGoods', data, 'POST');
}

/**
 * 获取可用优惠券接口
 * @param {Object} data - 请求参数
 * @param {number} data.page - 页码
 * @param {Array} data.data - 商品信息数组，包含goods_id和total_money
 * @returns {Promise}
 */
export function getCoupon(data) {
	return request('app/order/getCoupon', data, 'POST');
}

/**
 * 获取省份列表
 * @returns {Promise}
 */
export function getFirstArea() {
	return request('app/Index/getFirstArea', {}, 'POST');
}

/**
 * 获取市/区列表
 * @param {Object} data - 请求参数
 * @param {string} data.parent_id - 父级地区ID
 * @returns {Promise}
 */
export function getSencodeArea(data) {
	return request('app/Index/getSencodeArea', data, 'POST');
}
/**
 * 获取顶部大分类接口
 * @param {Object} data - 请求参数
 * @param {number} data.id - 分类id
 * @param {string} data.name - 分类名称
 * @returns {Promise}
 */
export function getFirstCate(data) {
	return request('app/index/getFirstCate', data, 'POST');
}

/**
 * 获取左侧小分类接口
 * @param {Object} data - 请求参数
 * @param {number} data.parent_id - 父分类id
 * @returns {Promise}
 */
export function getSonCate(data) {
	return request('app/index/getSonCate', data, 'POST');
}

/**
 * 限时抢购商品接口
 * @param {Object} data - 请求参数
 * @param {number} data.page - 页码
 * @returns {Promise}
 */
export function spikeGoods(data) {
	return request('app/goods/spikeGoods', data, 'POST');
}

/**
 * 推荐商品列表接口
 * @param {Object} data - 请求参数
 * @param {number} data.page - 页码
 * @returns {Promise}
 */
export function getRecommendGoodsList(data) {
	return request('app/goods/getRecommendGoodsList', data, 'POST');
}

/**
 * 促销商品接口
 * @param {Object} data - 请求参数
 * @param {number} data.page - 页码
 * @returns {Promise}
 */
export function promotionGoods(data) {
	return request('app/goods/promotionGoods', data, 'POST');
}

/**
 * 常用商品接口
 * @param {Object} data - 请求参数
 * @param {number} data.page - 页码
 * @returns {Promise}
 */
export function oftenUse(data) {
	return request('app/goods/oftenUse', data, 'POST');
}

/**
 * 商品详情接口
 * @param {Object} data - 请求参数
 * @param {number} data.goods_id - 商品ID
 * @returns {Promise}
 */
export function goodsDetail(data) {
	return request('app/goods/goodsDetail', data, 'POST');
}

/**
 * 收藏/取消收藏商品
 * @param {Object} data - 请求参数
 * @param {number} data.goods_id - 商品ID
 * @returns {Promise}
 */
export function addCollect(data) {
	return request('app/collection/addCollect', data, 'POST');
}
/**
 * 获取通知列表
 * @param {Object} data - 请求参数
 * @param {number} data.page - 页码
 * @returns {Promise}
 */
export function getUserNotice(data) {
	return request('app/user/userNotice', data, 'POST');
}

/**
 * 获取通知详情
 * @param {Object} data - 请求参数
 * @param {number} data.id - 通知ID
 * @returns {Promise}
 */
export function getNoticeDetail(data) {
	return request('app/user/noticeDetail', data, 'POST');
}

/**
 * 获取消费记录
 * @param {Object} data - 请求参数
 * @param {number} data.page - 页码
 * @param {number} data.pageSize - 每页条数
 * @returns {Promise}
 */
export function getUserConsumptionRecord(data) {
	return request('app/user/userConsumptionRecord', data, 'POST');
}

/**
 * 是否收藏商品
 * @param {Object} data - 请求参数
 * @param {number} data.goods_id - 商品ID
 * @returns {Promise}
 */
export function isCheckIsCollect(data) {
	return request('app/goods/checkIsCollect', data, 'POST');
}

/**
 * 获取用户收藏列表
 * @param {Object} data - 请求参数
 * @param {number} data.page - 页码
 * @returns {Promise}
 */
export function getUserCollect(data) {
	return request('app/collection/userCollect', data, 'POST');
}

/**
 * 取消收藏商品
 * @param {Object} data - 请求参数
 * @param {string} data.ids - 收藏ID，多个用逗号分隔
 * @returns {Promise}
 */
export function delUserCollect(data) {
	return request('app/collection/delUserCollect', data, 'POST');
}
/**
 * 商品评价列表接口
 * @param {Object} data - 请求参数
 * @param {number} data.goods_id - 商品ID
 * @param {number} data.type - 评价类型：1好评，2中评，3差评
 * @param {number} data.page - 页码
 * @returns {Promise}
 */
export function goodsEvaluate(data) {
	return request('app/goods/goodsEvaluate', data, 'POST');
}

/**
 * 获取收货地址列表
 * @param {Object} data - 请求参数
 * @param {number} data.page - 页码
 * @returns {Promise}
 */
export function getAddressList(data) {
	return request('app/address/addressList', data, 'POST');
}

/**
 * 添加收货地址
 * @param {Object} data - 请求参数
 * @param {string} data.receive_name - 收货人姓名
 * @param {string} data.receive_phone - 收货人手机
 * @param {string} data.region - 地区
 * @param {string} data.address - 详细地址
 * @param {number} data.is_default - 是否默认地址(0否，1是)
 * @returns {Promise}
 */
export function addAddress(data) {
	return request('app/address/addAddress', data, 'POST');
}

/**
 * 编辑收货地址
 * @param {Object} data - 请求参数
 * @param {number} data.id - 收货地址id
 * @param {string} data.receive_name - 收货人姓名
 * @param {string} data.receive_phone - 收货人手机
 * @param {string} data.region - 地区
 * @param {string} data.address - 详细地址
 * @param {number} data.is_default - 是否默认地址(0否，1是)
 * @returns {Promise}
 */
export function editAddress(data) {
	return request('app/address/editAddress', data, 'POST');
}

/**
 * 获取地址详情
 * @param {Object} data - 请求参数
 * @param {number} data.address_id - 收货地址id
 * @returns {Promise}
 */
export function getAddressInfo(data) {
	return request('app/address/getAddressInfo', data, 'POST');
}

/**
 * 删除收货地址
 * @param {Object} data - 请求参数
 * @param {number} data.id - 收货地址id
 * @returns {Promise}
 */
export function deleteAddress(data) {
	return request('app/address/delAddress', data, 'POST');
}

/**
 * 设置默认地址
 * @param {Object} data - 请求参数
 * @param {number} data.id - 收货地址id
 * @returns {Promise}
 */
export function setDefaultAddress(data) {
	return request('app/address/setDefault', data, 'POST');
}

/**
 * 获取用户优惠券列表
 * @param {Object} data - 请求参数
 * @param {number} data.page - 页码
 * @returns {Promise}
 */
export function getUserCoupon(data) {
	return request('app/user/userCoupon', data, 'POST');
}

/**
 * 确认购买商品获取订单号
 * @param {Object} data - 请求参数
 * @param {string} data.cart_ids - 购物车ID，多个用逗号分隔
 * @returns {Promise}
 */
export function sureBuyGoods(data) {
	return request('app/order/sureBuyGoods', data, 'POST');
}

/**
 * 货到付款
 * @param {Object} data - 请求参数
 * @param {string} data.order_num - 订单号
 * @param {number} data.address_id - 地址ID
 * @param {number} data.service_start_time - 服务开始时间（传0）
 * @param {number} data.service_end_time - 服务结束时间（传0）
 * @returns {Promise}
 */
export function cashDelivery(data) {
	return request('app/order/cashDelivery', data, 'POST');
}

/**
 * 微信支付
 * @param {Object} data - 请求参数
 * @param {string} data.order_sn - 订单号
 * @param {number} data.pay_type - 支付类型（传3）
 * @param {number} data.address_id - 地址ID
 * @param {number} data.coupon_id - 优惠券ID
 * @param {number} data.service_start_time - 服务开始时间（传0）
 * @param {number} data.service_end_time - 服务结束时间（传0）
 * @returns {Promise}
 */
export function payOrder(data) {
	return request('app/Pay/payOrder', data, 'POST');
}

/**
 * 余额支付
 * @param {Object} data - 请求参数
 * @param {string} data.order_num - 订单号
 * @param {number} data.address_id - 地址ID
 * @param {number} data.coupon_id - 优惠券ID
 * @param {string} data.pay_pwd - 支付密码
 * @param {number} data.service_start_time - 服务开始时间（传0）
 * @param {number} data.service_end_time - 服务结束时间（传0）
 * @returns {Promise}
 */
export function balancePayGoods(data) {
	return request('app/order/balancePayGoods', data, 'POST');
}

/**
 * 手机验证码登录
 * @param {Object} data - 登录参数
 * @param {string} data.phone - 手机号码
 * @param {string} data.code - 验证码
 * @param {string} data.wx_code - 微信code
 * @returns {Promise}
 */
export function phoneLogin(data) {
	return request('app/Wxchat/phoneLogin', data, 'POST');
}

/**
 * 订单列表接口
 * @param {Object} data - 请求参数
 * @param {number} data.page - 页码
 * @param {number} data.type - 订单类型：空-全部，1-待付款，-1待发货，2待收货，3已完成，5退款
 * @returns {Promise}
 */
export function getOrderList(data) {
	return request('app/Userorder/orderList', data, 'POST');
}

/**
 * 取消订单接口
 * @param {Object} data - 请求参数
 * @param {number} data.order_id - 订单ID
 * @returns {Promise}
 */
export function cancelOrder(data) {
	return request('app/Userorder/cancelOrder', data, 'POST');
}

/**
 * 删除订单接口
 * @param {Object} data - 请求参数
 * @param {number} data.order_id - 订单ID
 * @returns {Promise}
 */
export function deleteOrder(data) {
	return request('app/Userorder/delOrder', data, 'POST');
}

/**
 * 去支付订单信息接口
 * @param {Object} data - 请求参数
 * @param {string} data.order_num - 订单号
 * @returns {Promise}
 */
export function getOrderInfo(data) {
	return request('app/order/getOrderInfo', data, 'POST');
}
/**
 * 获取订单信息接口
 * @param {Object} data - 请求参数
 * @param {string} data.order_num - 订单号
 * @returns {Promise}
 */
export function getOrderDetail(data) {
	return request('app/Userorder/orderDetail', data, 'POST');
}
/**
 * 提交意见反馈
 * @param {Object} data - 请求参数
 * @param {string} data.content - 反馈内容
 * @param {string} [data.contact] - 联系方式（可选）
 * @returns {Promise}
 */
export function submitFeedback(data) {
	return request('app/user/message', data, 'POST');
}

/**
 * 获取充值金额列表
 * @returns {Promise}
 */
export function getSetRegMoney() {
	return request('app/user/getSetRegMoney', {}, 'POST');
}

/**
 * 提交充值请求
 * @param {Object} data - 请求参数
 * @param {number} data.reg_id - 充值金额ID
 * @param {number} data.type - 支付类型（固定传3）
 * @returns {Promise}
 */
export function recharge(data) {
	return request('app/user/Recharge', data, 'POST');
}

/**
 * 获取用户信息
 * @returns {Promise}
 */
export function getUserInfo() {
	return request('app/user/userInfo', {}, 'POST');
}

/**
 * 修改支付密码
 * @param {Object} data - 请求参数
 * @param {string} data.phone - 手机号码
 * @param {string} data.pay_pwd - 支付密码
 * @param {string} data.re_pay_pwd - 确认支付密码
 * @param {string} data.code - 验证码
 * @returns {Promise}
 */
export function editPayPwd(data) {
	return request('app/user/editPayPwd', data, 'POST');
}
/**
 * 修改登录密码
 * @param {Object} data - 请求参数
 * @param {string} data.phone - 手机号码
 * @param {string} data.password - 登录密码
 * @param {string} data.re_password - 确认登录密码
 * @param {string} data.code - 验证码
 * @returns {Promise}
 */
export function editPassword(data) {
	return request('app/user/editPassword', data, 'POST');
}

/**
 * 修改用户信息
 * @param {Object} data - 请求参数
 * @param {string} [data.nickname] - 昵称
 * @param {number} [data.sex] - 性别 (0:女, 1:男)
 * @param {string} [data.user_sign] - 个性签名
 * @param {string} [data.head] - 头像URL
 * @param {string} [data.img] - 头像文件
 * @returns {Promise}
 */
export function editUserInfo(data) {
	return request('app/user/editUserInfo', data, 'POST');
}

/**
 * 微信登录
 * @param {Object} data - 请求参数
 * @param {string} data.wx_code - 微信登录code
 * @param {string} data.phone - 手机号码
 * @param {string} data.password - 密码
 * @returns {Promise}
 */
export function wxchatLogin(data) {
	return request('app/Wxchat/login', data, 'POST');
}
/**
 * 微信注册
 * @param {Object} data - 请求参数
 * @param {string} data.wx_code - 微信登录code
 * @param {string} data.phone - 手机号码
 * @param {string} data.password - 密码
 * @param {string} data.code - 验证码
 * @returns {Promise}
 */
export function wxchatReg(data) {
	return request('app/Wxchat/reg', data, 'POST');
}
export function wxchatfindPwd(data) {
	return request('app/login/findPwd', data, 'POST');
}

/**
 * 获取关于我们信息
 * @returns {Promise}
 */
export function getAboutUs() {
	return request('app/user/aboutUs', {}, 'POST');
}

// 导出所有接口
export default {
	BASE_URL,
	getFirstArea,
	getSencodeArea,
	getAboutUs,
	cartBuyGoods,
	getCoupon,
	isCheckIsCollect,
	submitFeedback,
	addCollect,
	getAddressList,
	addAddress,
	editAddress,
	getAddressInfo,
	deleteAddress,
	setDefaultAddress,
	getUserCoupon,
	getOrderList,
	cancelOrder,
	deleteOrder,
	getOrderInfo,
	getOrderDetail,
	goodsDetail,
	wxLogin,
	sureBuyGoods,
	cashDelivery,
	payOrder,
	balancePayGoods,
	getSmsCode,
	register,
	getBanner,
	getParentCate,
	getFirstCate,
	getSonCate,
	getCountDown,
	getCustomerImage,
	getRecommendGoods,
	getGoodsList,
	userCart,
	addCart,
	changeNum,
	delCart,
	spikeGoods,
	getRecommendGoodsList,
	promotionGoods,
	oftenUse,
	goodsEvaluate,
	editPayPwd,
	editUserInfo,
	wxchatLogin,
	wxchatReg,
	wxchatfindPwd,
	getUserInfo,
	getSetRegMoney,
	recharge,
	phoneLogin
};